package com.sumer.brain.common.config;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 配置类，用于管理JWT（JSON Web Token）相关的属性。
 * <p>
 * 注意：
 * 1. userSecretKey 应该是一个非空且保密的字符串，用于JWT的签名。
 * 2. userTtl 表示用户Token的有效期，单位为毫秒，应为一个正数。
 * 3. userTokenName 表示JWT的Token名称，通常是一个HTTP头部的字段值。
 * <p>
 * 为了提高安全性，考虑从安全的配置管理系统中动态加载userSecretKey，并确保其加密存储。
 */
@Data
@Component
@ConfigurationProperties(prefix = "jwt")
public class JwtProperties {

    @NotEmpty(message = "userSecretKey cannot be empty")
    private String userSecretKey; // 建议从安全的配置管理系统中动态加载，并加密存储

    @Min(value = 1, message = "userTtl must be a positive number")
    private long userTtl; // Token的过期时间，单位：毫秒

    @NotEmpty(message = "userTokenName cannot be empty")
    private String userTokenName; // JWT的Token名称

    // 示例：加载和使用敏感信息的模拟方法（具体实现需根据外部系统集成）
    public void loadSecretKeyFromSecureConfig() {
        // 假设从一个安全的配置管理系统加载密钥，例如Spring Cloud Config Server或AWS Secrets Manager
        // 并假设这个方法会将加载的密钥赋值给userSecretKey
        // 请根据实际情况进行实现
    }

    public void encryptSensitiveData() {
        // 对敏感配置信息进行加密的逻辑
        // 请根据实际情况进行实现
    }
}
